﻿using System;
using System.Collections.Generic;
using System.Text;

using Galaxy.ModuleInterface.Messages;
using Galaxy.ModuleInterface.Events;


namespace Galaxy.ModuleInterface
{
    /// <summary>
    /// Интерфейс модуля Галактики
    /// </summary>
    public partial interface IGalaxyModule
    {
        /* --------------------------------------------------------------------- */

        #region Свойства  

        /// <summary>
        /// Активнгость модуля
        /// </summary>
        bool Enable { get; set; }   

        /// <summary>
        /// Модуль проинициализирован
        /// </summary>
        bool Initialized { get; }

        /// <summary>
        /// Подключённые модули
        /// </summary>
        CGalaxyModuleList ConnectedModules { get; }

        /// <summary>
        /// Имя модуля
        /// </summary>
        string Name { get; set; }

        #endregion

        /* --------------------------------------------------------------------- */

        #region Методы

        /// <summary>
        /// Запуск модуля
        /// </summary>
        void Start();

        /// <summary>
        /// Остановка модуля
        /// </summary>
        void Stop();

        /// <summary>
        /// Инициализацция модуля
        /// </summary>
        void Initialize(); 

        /// <summary>
        /// Обработка сообщения модулем
        /// </summary>
        /// <param name="Message">Сообщение модуля Галактики</param>
        void ProcessMessage(IGalaxyModuleMessage Message);

        /// <summary>
        /// Создание связи с модулем
        /// </summary>
        /// <param name="Module">Связываемый модуль</param>
        void Connect(IGalaxyModule Module);

        /// <summary>
        /// Отключение от модуля
        /// </summary>
        /// <param name="Module">Отключаемый модуль</param>
        void Disconnect(IGalaxyModule Module);

        #endregion

        /* --------------------------------------------------------------------- */
    }     
}
